import axios from 'axios';
import { createUniAppAxiosAdapter } from '@uni-helper/axios-adapter';
import { useUserStore } from '@/store/user';
import { BASE_URL } from '@/config/env';

axios.defaults.adapter = createUniAppAxiosAdapter();

// 创建axios实例
const http = axios.create({
  baseURL: BASE_URL, // 统一使用环境配置中的BASE_URL
  timeout: 10000,
  withCredentials: true,
});

// 请求拦截器
http.interceptors.request.use(config => {
  console.log('发送请求:', config.url);
  
  // 获取用户 Token
  const token = uni.getStorageSync('token');
  
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  
  return config;
}, error => {
  console.error('请求错误:', error);
  return Promise.reject(error);
});

// 响应拦截器
http.interceptors.response.use(
  response => {
    console.log('响应成功:', response.config.url, response.data);
    
    // 如果返回的状态码是 401，说明 Token 过期或无效
    if (response.data && response.data.code === 401) {
      // 获取用户状态
      const userStore = useUserStore();
      if (userStore.isLoggedIn) {
        // 清空登录状态
        userStore.logout();
        // 提示用户
        uni.showToast({
          title: '登录已过期，请重新登录',
          icon: 'none'
        });
        
        // 延时跳转到首页
        setTimeout(() => {
          uni.reLaunch({
            url: '/pages/index/index'
          });
        }, 1500);
      }
    }
    
    return response.data;
  },
  error => {
    console.error('响应错误:', error);
    
    // 处理网络错误
    let errorMsg = '网络异常，请稍后重试';
    
    if (error.response) {
      // 服务器返回错误状态码
      switch (error.response.status) {
        case 401:
          errorMsg = '登录已过期，请重新登录';
          // 获取用户状态
          const userStore = useUserStore();
          if (userStore.isLoggedIn) {
            // 清空登录状态
            userStore.logout();
          }
          break;
        case 403:
          errorMsg = '没有权限访问该资源';
          break;
        case 404:
          errorMsg = '请求的资源不存在';
          break;
        case 500:
          errorMsg = '服务器内部错误';
          break;
        default:
          errorMsg = `服务器错误(${error.response.status})`;
      }
    } else if (error.request) {
      // 请求已发送但未收到响应
      errorMsg = '服务器无响应，请检查网络';
    }
    
    // 显示错误提示
    uni.showToast({
      title: errorMsg,
      icon: 'none'
    });
    
    return Promise.reject(error);
  }
);

export default http;